/**
 * Promise类的静态方法race相比较其他静态方法来说是比较好实现的，原因在于实现这个方法的过程中可以巧妙地使用Promise的状态只能改变一次的特性
换个角度理解这个问题，那就是让多个Promise对象ps状态发生改变之后再去改变一个预设的Promise对象x的状态，因为x的状态只能发生一次变化，所以在x的状态发生变化之后其包裹的值就是ps中最先发生状态改变的那一个
 * @param {*} promiseList 
 * @returns 
 */
function race(promiseList) {
  return new Promise((resolve, reject) => {
    promiseList.forEach((p) => {
      p().then((res) => resolve(res), reject);
    });
  });
}

//egg
let arr = [1, 2, 3];
let pArr = arr.map((item) => {
  return function () {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log("[ item ] >", item);
        resolve(item);
      }, item * 1000);
    });
  };
});

race(pArr).then((res) => {
  console.log("[ res ] >", res);
});
